home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
docs
/
ippon
/
ver
/
014
/
ippon014.lzh
/
FuncEnemy
/
zakoa.c
next >
Wrap
C/C++ Source or Header
|
2000-07-07
|
2KB
|
97 lines
/* zakoa.c */
#include <xsp2lib.h>
#include "../main.h"
#include "../player.h"
#include "../enemy.h"
#include "../eshot.h"
#include "../effect.h"
#include "../psearch.h"
/* 関数プロトタイプ宣言 */
static short EnemyMoveZakoB (ENEMY *);
static void EnemyFreeZakoB (ENEMY *);
/* 初期化ルーチン */
void EnemyAllocZakoB (ENEMY * p)
{
p->pt = obj_zako02;
p->info = 0x0800 | PRIORITY_ZAKO; /* 数値を決めうちして入れるのはよくない */
p->hit_sx = 12; /* 自機ショットに対する当たり判定 */
p->hit_sy = 12;
p->hp = 2; /* 耐久力 */
p->damage = 0;
p->func_enemy_move = EnemyMoveZakoB;
p->func_enemy_free = EnemyFreeZakoB;
p->s_work = 0; /* ショット用ワークを初期化 */
/* コア関連 */
p->core_info = PALET_CORE_BLUE | PRIORITY_ZAKO;
p->core_pt = sp_core + 1;
}
/* 移動ルーチン */
/* 返り値:非0なら消去 */
static short EnemyMoveZakoB (ENEMY * p)
{
/* 敵をくるくる回すアニメーション */
p->pt++;
if (p->pt > obj_zako02 + 15)
p->pt = obj_zako02;
/* X座標を自機に近づける */
if (p->lx > player->lx)
p->lx -= 32768;
else
p->lx += 32768;
p->ly += 2 * 65536;
/* 上位ワード(固定整数部)だけ取り出す */
p->x = p->lx >> 16;
p->y = p->ly >> 16;
/* 弾を撃つ処理(30フレームに1回発射) */
if (p->s_work++ > 30) {
char angle;
p->s_work = 0;
angle = psearch (p->x, p->y); /* 敵から見た自機の方向を unsigned char で返す */
EshotAlloc (0, p->x, p->y, 10, angle); /* 弾を撃つ */
}
if (p->y > 256 + 32)
return (-1); /* Y座標が 256+32 以上なら消去 */
/* もし前回ダメージを受けたなら */
if (p->damage) {
p->hp -= p->damage;
p->damage = 0;
/* 耐久力が0以下なら消去 */
if (p->hp <= 0) {
EffectAlloc (EFFECT_EXPLZAKO, 0, p->x, p->y); /* 爆発パターンを出現させる */
return (-1);
}
}
xobj_set_st (p); /* 表示 */
/* コアの表示 */
p->core_x = p->x - 8;
p->core_y = p->y - 8;
xsp_set_st (&(p->core_x));
return (0);
}
/* 消去ルーチン */
static void EnemyFreeZakoB (ENEMY * p)
{
}